<!DOCTYPE html>
<html>
<head>
    <title>Constraints demo - p2.js physics engine</title>
    <script src="../build/p2.js"></script>
    <script src="../build/p2.renderer.js"></script>
    <link href="css/demo.css" rel="stylesheet"/>
    <meta name="description" content="Tests a few constraints.">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
</head>
<body>
    <script>

        var N = 10,  // Number of circles
            r = 0.1; // circle radius

        // Create demo application
        var app = new p2.WebGLRenderer(function(){

            var world = new p2.World({
                gravity : [0,-15]
            });

            this.setWorld(world);

            world.solver.iterations = N;

            // Add a line
            lineBody = new p2.Body({
                mass: 1,
                position: [-1.5,-0.5],
                angle: Math.PI / 2,
                angularVelocity : 10
            });
            lineBody.addShape(new p2.Line({ length: 1 }));
            world.addBody(lineBody);

            // Add a "null" body
            var groundBody = new p2.Body();
            world.addBody(groundBody);

            var revolute = new p2.RevoluteConstraint(lineBody, groundBody, {
                worldPivot: [-1.5, 0]
            });
            world.addConstraint(revolute);

            // Create circle rope
            var lastBody;
            for(var i=N-1; i>=0; i--){
                var x = 0;
                var y = (N-i - N/2) * r * 2.1;
                var p = new p2.Body({
                    mass: i==0 ? 0 : 1,
                    position: [x,y],
                });
                p.addShape(new p2.Circle({ radius: r }));
                world.addBody(p);
                if(lastBody){
                    var c = new p2.DistanceConstraint(p, lastBody);
                    world.addConstraint(c);
                } else {
                    p.velocity[0] = 10;
                }
                lastBody = p;
            }

            // Create RevoluteConstraint
            var bodyA = new p2.Body({
                mass: 1,
                position: [3,0],
                angularVelocity: 30
            });
            bodyA.addShape(new p2.Circle({ radius: 1 }));
            world.addBody(bodyA);
            var bodyB = new p2.Body({
                mass: 0,
                position: [3,4],
            });
            bodyB.addShape(new p2.Circle({ radius: 1 }));
            world.addBody(bodyB);
            var cr = new p2.RevoluteConstraint(bodyA, bodyB, {
                worldPivot: [3, 2]
            });
            cr.setLimits(-Math.PI / 4, Math.PI / 4);
            world.addConstraint(cr);

            this.frame(0, 0, 8, 8);
        });

    </script>
</body>
</html>
